package cn.chinaunicom.mini.program.dingtalk.openapi.service;

import org.springframework.stereotype.Component;

import com.dingtalk.api.request.OapiMediaUploadRequest;
import com.dingtalk.api.response.OapiMediaUploadResponse;
import com.taobao.api.ApiException;
import com.taobao.api.FileItem;

import cn.chinaunicom.mini.program.dingtalk.openapi.client.IDingTalkClient;
import cn.chinaunicom.mini.program.dingtalk.openapi.model.enums.DingTalkMediaType;
import lombok.extern.slf4j.Slf4j;

/**
 * @ProjectName: dingtalk-adapter
 * @Package: cn.chinaunicom.mini.program.dingtalk.openapi.service
 * @ClassName: DingTalkMediaAPI
 * @Description: 钉钉多媒体文件接口
 * @Author: wangjc
 * @CreateDate: 2024/6/14
 * @UpdateUser: wangjc
 * @UpdateDate: 2024/6/14
 * @UpdateRemark: 更新内容
 * @Version: 1.0
 */
@Slf4j
@Component
public class DingTalkMediaAPI {

	/**
	 * 上传媒体文件到钉钉。
	 *
	 * 该方法用于将指定的媒体文件上传到钉钉平台，支持不同的媒体类型。上传成功后，将返回媒体文件的ID。
	 * 接口详情 https://open.dingtalk.com/document/orgapp/apsara-file-storage-for-hdfs-overview
	 *
	 * @param mediaFile 要上传的媒体文件，不能为null。
	 * @param mediaType 媒体文件的类型，例如图片、视频等，不能为null。
	 * @return 媒体文件的ID，如果上传失败则返回null。
	 */
	public String uploadMediaFile(FileItem mediaFile, DingTalkMediaType mediaType, String accessToken) throws ApiException {
		// 创建上传请求对象，并设置媒体文件和类型
		OapiMediaUploadRequest req = new OapiMediaUploadRequest();
		// 要上传的媒体文件
		req.setMedia(mediaFile);
		req.setType(mediaType.getType());

		// 执行上传请求，获取响应
		OapiMediaUploadResponse rsp = IDingTalkClient.execute("https://oapi.dingtalk.com/media/upload", req,
				accessToken);
		// 记录上传成功的日志信息
		log.debug(rsp.getBody());

		// 返回媒体文件的ID
		return rsp.getMediaId();
	}
}
